# -*- coding: utf-8 -*-
"""
@date: 2020/12/23 10:34
@file: __gititem__use.py
@author: lilong
@desc: Python 类特殊方法__getitem__使用
"""

"""
参考：https://zhuanlan.zhihu.com/p/27661382

凡是在类中定义了这个__getitem__ 方法，那么它的实例对象（假定为p），可以像这样
p[key] 取值，当实例对象做p[key] 运算时，会调用类中的方法__getitem__。
一般如果想使用索引访问元素时，就可以在类中定义这个方法（__getitem__(self, key) ）
"""


# # （1）第一种方式
# class DataBase:
#
#     def __init__(self, id, address):
#         self.id = id
#         self.address = address
#         self.d = {self.id: 1,
#                   self.address: "192.168.1.1",
#                   }
#
#     def __getitem__(self, key):
#         # return self.__dict__.get(key, "100")
#         return self.d.get(key, "default")
#
#
# data = DataBase(1, "192.168.2.11")
# print(data["hi"])
# print(data[data.id])


# # （2）第二种方式
# class DataBase:
#
#     def __init__(self, id, address):
#         self.id = id
#         self.address = address
#
#     def __getitem__(self, key):
#         return self.__dict__.get(key, "100")
#
#
# data = DataBase(1, "192.168.2.11")
# print(data["hi"])
# print(data["id"])


# （3）第三种方式：迭代
class STgetitem:

    def __init__(self, text):
        self.text = text

    def __getitem__(self, index):
        result = self.text[index].upper()
        return result


p = STgetitem("黄哥Python")
print(p[0])
print("------------------------")
for char in p:
    print(char)
